From b1694abd292f9f1b061ef6a1408cdf2b618a8f5a Mon Sep 17 00:00:00 2001 From: Softonik Date: Sun, 11 Feb 2024 21:47:06 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A1=D1=86=D0=B5=D0=BD=D0=B0=D1=80=D0=B8?= =?UTF-8?q?=D0=B9:=20=D0=9A=D0=B0=D1=81=D1=82=D0=BE=D0=BC=D0=BD=D1=8B?= =?UTF-8?q?=D0=B5=20=D1=82=D0=B8=D0=BF=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/service/expr.go | 2 ++ pkg/service/features/variables.feature | 16 ++++++++++++++- pkg/service/type.go | 27 ++++++++++++++++++++++++-- 3 files changed, 42 insertions(+), 3 deletions(-) diff --git a/pkg/service/expr.go b/pkg/service/expr.go index 4e2ffde..52ac982 100644 --- a/pkg/service/expr.go +++ b/pkg/service/expr.go @@ -25,6 +25,8 @@ func handleExpr(expr ast.Expr) string { code += handleSelectorExpr(e) case *ast.StructType: code += handleStructType(e) + case *ast.ArrayType: + code += handleArray(e) } return code } diff --git a/pkg/service/features/variables.feature b/pkg/service/features/variables.feature index eac4991..afd844c 100644 --- a/pkg/service/features/variables.feature +++ b/pkg/service/features/variables.feature @@ -57,4 +57,18 @@ int a[]; bool b[]; int c[8]; int d[LENGTH]; -``` \ No newline at end of file +``` + + Сценарий: Кастомные типы + * Исходник: +``` +package test + +type Mera int +type GPIOS [GPIO_count]bool +``` + * Результат: +``` +typedef int Mera; +typedef bool GPIOS[GPIO_count]; +``` diff --git a/pkg/service/type.go b/pkg/service/type.go index d9eed96..6abb243 100644 --- a/pkg/service/type.go +++ b/pkg/service/type.go @@ -17,8 +17,31 @@ func handleTypeSpec(s *ast.TypeSpec) (code string) { return handleType(s) } -func handleType(s *ast.TypeSpec) string { - return "" +func handleType(s *ast.TypeSpec) (code string) { + code += "typedef " + code += handleExpr(s.Type) + code += " " + code += handleIdentExpr(s.Name) + code += optionallyAddArrayDetails(s) + code += ";" + + return +} + +func optionallyAddArrayDetails(s *ast.TypeSpec) (code string) { + v, ok := s.Type.(*ast.ArrayType) + if !ok { + return + } + + code += "[" + code += handleArrayLen(v) + code += "]" + return +} + +func handleArrayLen(a *ast.ArrayType) (code string) { + return handleExpr(a.Len) } func handleStructType(s *ast.StructType) (code string) {