Сценарий: Последовательность блоков: константы, типы, абстрактные классы

Этот коммит содержится в:
Softonik 2024-02-12 02:43:20 +03:00 коммит произвёл Nobody
родитель 8e3a1a3d7a
коммит 7ffcf77114
5 изменённых файлов: 83 добавлений и 12 удалений

Просмотреть файл

@ -5,6 +5,10 @@ import (
"strings"
)
var (
abstractClassDeclarations []Class
)
type abstractClass struct {
name string
Interface *ast.InterfaceType
@ -82,6 +86,12 @@ func addAbstractClassFromStructType(name string, it *ast.InterfaceType) Class {
}
func createAbstractClass(className string) *abstractClass {
c := NewAbstractClass(className)
addClassDeclaration(c)
addAbstractClassDeclaration(c)
return c
}
func addAbstractClassDeclaration(c Class) {
dlock.Lock()
defer dlock.Unlock()
abstractClassDeclarations = append(abstractClassDeclarations, c)
}

Просмотреть файл

@ -352,6 +352,10 @@ dev1=NewDevice();
```
package test
type Device interface {
Name() string
}
type Mera int
const c1 = 4
@ -360,4 +364,8 @@ const c1 = 4
```
const int c1 = 4;
typedef int Mera;
class Device {
public:
virtual std::string Name() = 0;
};
```

Просмотреть файл

@ -87,6 +87,8 @@ func (s *defaultService) Start() error {
}
constDeclarations = nil
typeDeclarations = nil
abstractClassDeclarations = nil
classDeclarations = nil
funcDeclarations = nil
helpersForDeclarations = nil
@ -106,6 +108,8 @@ func (s *defaultService) Start() error {
s.printIncludeHeaders()
s.printConstDeclarations()
s.printTypeDeclarations()
s.printAbstractClassDeclarations()
s.printClassDeclarations()
s.printFunctionDeclarations()
s.printGoHelperDeclarations()
@ -145,6 +149,32 @@ func (s *defaultService) printConstDeclarations() {
}
s.out.Write([]byte("\n"))
}
func (s *defaultService) printTypeDeclarations() {
dlock.Lock()
defer dlock.Unlock()
for _, c := range typeDeclarations {
d := c.String()
s.out.Write([]byte(d + "\n"))
if s.header != nil {
s.header.Write([]byte(d + "\n"))
}
}
s.out.Write([]byte("\n"))
}
func (s *defaultService) printAbstractClassDeclarations() {
dlock.Lock()
defer dlock.Unlock()
for _, c := range abstractClassDeclarations {
d := c.String()
s.out.Write([]byte(d + "\n"))
if s.header != nil {
s.header.Write([]byte(d + "\n"))
}
}
s.out.Write([]byte("\n"))
}
func (s *defaultService) printClassDeclarations() {
dlock.Lock()
defer dlock.Unlock()

Просмотреть файл

@ -19,17 +19,6 @@ func handleTypeSpec(s *ast.TypeSpec) (code string) {
return handleType(s)
}
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 {

34
pkg/service/types.go Обычный файл
Просмотреть файл

@ -0,0 +1,34 @@
package service
import "go/ast"
var (
typeDeclarations []*Type
)
type Type struct {
s *ast.TypeSpec
}
func NewType(s *ast.TypeSpec) *Type {
return &Type{s: s}
}
func (c *Type) String() (code string) {
code += "typedef "
code += handleExpr(c.s.Type)
code += " "
code += handleIdentExpr(c.s.Name)
code += optionallyAddArrayDetails(c.s)
code += ";"
return
}
func handleType(s *ast.TypeSpec) (code string) {
addType(s)
return
}
func addType(s *ast.TypeSpec) {
c := NewType(s)
typeDeclarations = append(typeDeclarations, c)
}