git-subtree-dir: golang-lean git-subtree-mainline:6487c7046fgit-subtree-split:f5f1701922
34 lines
1.1 KiB
Text
34 lines
1.1 KiB
Text
import GolangLean.AST
|
||
|
||
namespace GolangLean
|
||
|
||
/-! # Runtime values.
|
||
|
||
Go is statically typed, so a faithful runtime keeps a `GoType` alongside each
|
||
value. For the first cut we keep things untyped (a tagged union) and recover
|
||
type safety later by adding a static type-checker pass on the AST. The shape
|
||
mirrors octive-lean's `Value`. -/
|
||
|
||
mutual
|
||
|
||
inductive Value where
|
||
| nil
|
||
| boolV : Bool → Value
|
||
| intV : Int → Value
|
||
| floatV : Float → Value
|
||
| stringV : String → Value
|
||
| sliceV : Array Value → Value
|
||
| mapV : Array (Value × Value) → Value -- ordered list, equality via key
|
||
| structV : Array (String × Value) → Value
|
||
| ptrV : Nat → Value -- index into heap
|
||
| funcV : Closure → Value
|
||
| chanV : Nat → Value -- index into channel table
|
||
| tupleV : Array Value → Value -- multi-return packs
|
||
|
||
/-- A function closure: signature + body + captured environment. -/
|
||
inductive Closure where
|
||
| mk : FuncType → Array Stmt → List (String × Value) → Closure
|
||
|
||
end
|
||
|
||
end GolangLean
|