Phase 8: static_assert, comptime, #emit, own keyword, trait objects (&dyn Trait), associated types

This commit is contained in:
2026-06-01 11:04:47 +03:00
parent 21f8b2e85a
commit 5830548d54
10 changed files with 487 additions and 42 deletions
+18 -1
View File
@@ -27,8 +27,10 @@ type
tekPath
tekSlice
tekPointer
tekOwn ## own T — owned value (gradual ownership)
tekRef ## &T — shared reference (gradual ownership)
tekMutRef ## &mut T — mutable reference
tekDynRef ## &dyn Trait — trait object (fat pointer)
tekTuple
tekSelf
@@ -43,8 +45,10 @@ type
of tekSlice:
sliceElement*: TypeExpr
sliceSize*: Expr ## nil for unsized slices T[]
of tekPointer, tekRef, tekMutRef:
of tekOwn, tekPointer, tekRef, tekMutRef:
pointerPointee*: TypeExpr
of tekDynRef:
dynInterface*: string
of tekTuple:
tupleElements*: seq[TypeExpr]
of tekSelf:
@@ -224,6 +228,9 @@ type
skReturn
skBreak
skContinue
skStaticAssert
skComptime
skEmit
skDecl
ElseIf* = object
@@ -276,6 +283,14 @@ type
stmtBreakLabel*: string
of skContinue:
stmtContinueLabel*: string
of skStaticAssert:
stmtStaticAssertCond*: Expr
stmtStaticAssertMsg*: Expr
of skComptime:
stmtComptimeBlock*: Block
of skEmit:
stmtEmitExpr*: Expr
stmtEmitEvaluated*: string ## filled by sema CTFE
of skDecl:
stmtDecl*: Decl
@@ -357,11 +372,13 @@ type
declUnionFields*: seq[UnionField]
of dkInterface:
declInterfaceName*: string
declInterfaceAssocTypes*: seq[string] ## associated type names: type Output;
declInterfaceMethods*: seq[Decl] ## FuncDecl signatures only
of dkImpl:
declImplTypeName*: string
declImplTypeParams*: seq[TypeParam] ## type parameters for generic impl: extend Box<T>
declImplInterface*: string ## empty if not for interface
declImplAssocTypes*: seq[tuple[name: string, typ: TypeExpr]] ## type Output = int;
declImplMethods*: seq[Decl]
of dkModule:
declModuleName*: string