you're lost
This commit is contained in:
parent
47c6d3b32f
commit
5350bb8c2b
|
|
@ -88,30 +88,6 @@ type LabelDefinition = [string] // Just ".label_name:"
|
|||
|
||||
export type ProgramItem = InstructionTuple | LabelDefinition
|
||||
|
||||
//
|
||||
// Parse bytecode from human-readable string format.
|
||||
// Operand types are determined by prefix/literal:
|
||||
// #42 -> immediate number (e.g., JUMP #5, MAKE_ARRAY #3)
|
||||
// .label -> label reference (e.g., JUMP .loop_start, MAKE_FUNCTION (x y) .body)
|
||||
// name -> variable/function name (e.g., LOAD x, LOAD_NATIVE add)
|
||||
// 42 -> number constant (e.g., PUSH 42)
|
||||
// "str" -> string constant (e.g., PUSH "hello")
|
||||
// 'str' -> string constant (e.g., PUSH 'hello')
|
||||
// true -> boolean constant (e.g., PUSH true)
|
||||
// false -> boolean constant (e.g., PUSH false)
|
||||
// null -> null constant (e.g., PUSH null)
|
||||
//
|
||||
// Labels:
|
||||
// .label_name: -> label definition (marks current instruction position)
|
||||
//
|
||||
// Function definitions:
|
||||
// MAKE_FUNCTION (x y) #7 -> basic function (numeric offset)
|
||||
// MAKE_FUNCTION (x y) .body -> basic function (label reference)
|
||||
// MAKE_FUNCTION (x y=42) #7 -> with defaults
|
||||
// MAKE_FUNCTION (x ...rest) #7 -> variadic
|
||||
// MAKE_FUNCTION (x @named) #7 -> named
|
||||
//
|
||||
|
||||
function parseFunctionParams(paramStr: string, constants: Constant[]): {
|
||||
params: string[]
|
||||
defaults: Record<string, number>
|
||||
|
|
@ -373,6 +349,29 @@ function toBytecodeFromArray(program: ProgramItem[]): Bytecode /* throws */ {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
////
|
||||
// Parse bytecode from human-readable string format.
|
||||
// Operand types are determined by prefix/literal:
|
||||
// #42 -> immediate number (e.g., JUMP #5, MAKE_ARRAY #3)
|
||||
// .label -> label reference (e.g., JUMP .loop_start, MAKE_FUNCTION (x y) .body)
|
||||
// name -> variable/function name (e.g., LOAD x, LOAD_NATIVE add)
|
||||
// 42 -> number constant (e.g., PUSH 42)
|
||||
// "str" -> string constant (e.g., PUSH "hello")
|
||||
// 'str' -> string constant (e.g., PUSH 'hello')
|
||||
// true -> boolean constant (e.g., PUSH true)
|
||||
// false -> boolean constant (e.g., PUSH false)
|
||||
// null -> null constant (e.g., PUSH null)
|
||||
//
|
||||
// Labels:
|
||||
// .label_name: -> label definition (marks current instruction position)
|
||||
//
|
||||
// Function definitions:
|
||||
// MAKE_FUNCTION (x y) #7 -> basic function (numeric offset)
|
||||
// MAKE_FUNCTION (x y) .body -> basic function (label reference)
|
||||
// MAKE_FUNCTION (x y=42) #7 -> with defaults
|
||||
// MAKE_FUNCTION (x ...rest) #7 -> variadic
|
||||
// MAKE_FUNCTION (x @named) #7 -> named
|
||||
function toBytecodeFromString(str: string): Bytecode /* throws */ {
|
||||
const lines = str.trim().split("\n")
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user