mirror of
https://github.com/Open-Argon/argon-v3.git
synced 2025-12-06 00:46:07 +00:00
fix parsing taking really long
This commit is contained in:
@@ -559,8 +559,7 @@ func ArArray(arr []any) ArObject {
|
|||||||
for i, v := range arr {
|
for i, v := range arr {
|
||||||
res, err := runOperation(operationType{
|
res, err := runOperation(operationType{
|
||||||
operation: 8,
|
operation: 8,
|
||||||
value1: v,
|
values: []any{v, args[0].(ArObject).obj["__value__"].([]any)[i]},
|
||||||
value2: args[0].(ArObject).obj["__value__"].([]any)[i],
|
|
||||||
}, stack{}, 0)
|
}, stack{}, 0)
|
||||||
if err.EXISTS {
|
if err.EXISTS {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -584,8 +583,7 @@ func ArArray(arr []any) ArObject {
|
|||||||
for _, v := range arr {
|
for _, v := range arr {
|
||||||
res, err := runOperation(operationType{
|
res, err := runOperation(operationType{
|
||||||
operation: 9,
|
operation: 9,
|
||||||
value1: v,
|
values: []any{v, args[0]},
|
||||||
value2: args[0],
|
|
||||||
}, stack{}, 0)
|
}, stack{}, 0)
|
||||||
if err.EXISTS {
|
if err.EXISTS {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -610,8 +608,7 @@ func ArArray(arr []any) ArObject {
|
|||||||
for _, v := range arr {
|
for _, v := range arr {
|
||||||
res, err := runOperation(operationType{
|
res, err := runOperation(operationType{
|
||||||
operation: 9,
|
operation: 9,
|
||||||
value1: v,
|
values: []any{v, args[0]},
|
||||||
value2: args[0],
|
|
||||||
}, stack{}, 0)
|
}, stack{}, 0)
|
||||||
if err.EXISTS {
|
if err.EXISTS {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|||||||
@@ -342,5 +342,16 @@ func makeGlobal() ArObject {
|
|||||||
}
|
}
|
||||||
return ArString(typeof(a[0])), ArErr{}
|
return ArString(typeof(a[0])), ArErr{}
|
||||||
}}
|
}}
|
||||||
|
vars["sha256"] = builtinFunc{"sha256", func(a ...any) (any, ArErr) {
|
||||||
|
if len(a) != 1 {
|
||||||
|
return nil, ArErr{TYPE: "sha256", message: "sha256 takes 1 argument, got " + fmt.Sprint(len(a)), EXISTS: true}
|
||||||
|
}
|
||||||
|
a[0] = ArValidToAny(a[0])
|
||||||
|
switch x := a[0].(type) {
|
||||||
|
case string:
|
||||||
|
return ArString(sha256Hash(x)), ArErr{}
|
||||||
|
}
|
||||||
|
return nil, ArErr{TYPE: "TypeError", message: "Cannot hash type '" + typeof(a[0]) + "'", EXISTS: true}
|
||||||
|
}}
|
||||||
return Map(vars)
|
return Map(vars)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,8 +50,7 @@ func parseIfStatement(code UNPARSEcode, index int, codeline []UNPARSEcode) (ifst
|
|||||||
},
|
},
|
||||||
i,
|
i,
|
||||||
codeline,
|
codeline,
|
||||||
0,
|
0)
|
||||||
)
|
|
||||||
if err.EXISTS || !worked {
|
if err.EXISTS || !worked {
|
||||||
if j == 1 {
|
if j == 1 {
|
||||||
return ifstatement{}, worked, err, step
|
return ifstatement{}, worked, err, step
|
||||||
|
|||||||
@@ -285,8 +285,7 @@ func Map(m anymap) ArObject {
|
|||||||
}
|
}
|
||||||
val, err := runOperation(operationType{
|
val, err := runOperation(operationType{
|
||||||
operation: 9,
|
operation: 9,
|
||||||
value1: v,
|
values: []any{v, a[k]},
|
||||||
value2: a[k],
|
|
||||||
}, stack{}, 0)
|
}, stack{}, 0)
|
||||||
if err.EXISTS {
|
if err.EXISTS {
|
||||||
return val, err
|
return val, err
|
||||||
|
|||||||
1006
src/operations.go
1006
src/operations.go
File diff suppressed because it is too large
Load Diff
151
src/translate.go
151
src/translate.go
@@ -11,7 +11,30 @@ type UNPARSEcode struct {
|
|||||||
path string
|
path string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var knownFailures = []string{}
|
||||||
|
var knownFailuresErrs = []ArErr{}
|
||||||
|
|
||||||
|
func StringExists(arr []string, target string) (bool, ArErr) {
|
||||||
|
for i, str := range arr {
|
||||||
|
if str == target {
|
||||||
|
return true, knownFailuresErrs[i]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false, ArErr{}
|
||||||
|
}
|
||||||
|
|
||||||
func translateVal(code UNPARSEcode, index int, codelines []UNPARSEcode, isLine int) (any, bool, ArErr, int) {
|
func translateVal(code UNPARSEcode, index int, codelines []UNPARSEcode, isLine int) (any, bool, ArErr, int) {
|
||||||
|
known, knownErr := StringExists(knownFailures, code.code)
|
||||||
|
if known {
|
||||||
|
return nil, false, ArErr{
|
||||||
|
knownErr.TYPE,
|
||||||
|
knownErr.message,
|
||||||
|
code.line,
|
||||||
|
code.path,
|
||||||
|
code.realcode,
|
||||||
|
true,
|
||||||
|
}, 1
|
||||||
|
}
|
||||||
var (
|
var (
|
||||||
resp any = nil
|
resp any = nil
|
||||||
worked bool = false
|
worked bool = false
|
||||||
@@ -20,36 +43,91 @@ func translateVal(code UNPARSEcode, index int, codelines []UNPARSEcode, isLine i
|
|||||||
)
|
)
|
||||||
if isLine == 2 {
|
if isLine == 2 {
|
||||||
if isDeleteVariable(code) {
|
if isDeleteVariable(code) {
|
||||||
return parseDelete(code, index, codelines)
|
resp, worked, err, i = parseDelete(code, index, codelines)
|
||||||
|
if !worked {
|
||||||
|
knownFailures = append(knownFailures, code.code)
|
||||||
|
knownFailuresErrs = append(knownFailuresErrs, err)
|
||||||
|
}
|
||||||
|
return resp, worked, err, i
|
||||||
} else if isComment(code) {
|
} else if isComment(code) {
|
||||||
resp, worked, err, i = parseComment(code, index, codelines)
|
resp, worked, err, i = parseComment(code, index, codelines)
|
||||||
if worked {
|
if worked {
|
||||||
return resp, worked, err, i
|
return resp, worked, err, i
|
||||||
}
|
}
|
||||||
} else if isReturn(code) {
|
} else if isReturn(code) {
|
||||||
return parseReturn(code, index, codelines)
|
resp, worked, err, i = parseReturn(code, index, codelines)
|
||||||
|
if !worked {
|
||||||
|
knownFailures = append(knownFailures, code.code)
|
||||||
|
knownFailuresErrs = append(knownFailuresErrs, err)
|
||||||
|
}
|
||||||
|
return resp, worked, err, i
|
||||||
} else if isBreak(code) {
|
} else if isBreak(code) {
|
||||||
return parseBreak(code)
|
resp, worked, err, i = parseBreak(code)
|
||||||
|
if !worked {
|
||||||
|
knownFailures = append(knownFailures, code.code)
|
||||||
|
knownFailuresErrs = append(knownFailuresErrs, err)
|
||||||
|
}
|
||||||
|
return resp, worked, err, i
|
||||||
} else if isContinue(code) {
|
} else if isContinue(code) {
|
||||||
return parseContinue(code)
|
resp, worked, err, i = parseContinue(code)
|
||||||
|
if !worked {
|
||||||
|
knownFailures = append(knownFailures, code.code)
|
||||||
|
knownFailuresErrs = append(knownFailuresErrs, err)
|
||||||
|
}
|
||||||
|
return resp, worked, err, i
|
||||||
} else if isIfStatement(code) {
|
} else if isIfStatement(code) {
|
||||||
return parseIfStatement(code, index, codelines)
|
resp, worked, err, i = parseIfStatement(code, index, codelines)
|
||||||
|
if !worked {
|
||||||
|
knownFailures = append(knownFailures, code.code)
|
||||||
|
knownFailuresErrs = append(knownFailuresErrs, err)
|
||||||
|
}
|
||||||
|
return resp, worked, err, i
|
||||||
} else if isWhileLoop(code) {
|
} else if isWhileLoop(code) {
|
||||||
return parseWhileLoop(code, index, codelines)
|
resp, worked, err, i = parseWhileLoop(code, index, codelines)
|
||||||
|
if !worked {
|
||||||
|
knownFailures = append(knownFailures, code.code)
|
||||||
|
knownFailuresErrs = append(knownFailuresErrs, err)
|
||||||
|
}
|
||||||
|
return resp, worked, err, i
|
||||||
} else if isForeverLoop(code) {
|
} else if isForeverLoop(code) {
|
||||||
return parseForeverLoop(code, index, codelines)
|
resp, worked, err, i = parseForeverLoop(code, index, codelines)
|
||||||
|
if !worked {
|
||||||
|
knownFailures = append(knownFailures, code.code)
|
||||||
|
knownFailuresErrs = append(knownFailuresErrs, err)
|
||||||
|
}
|
||||||
|
return resp, worked, err, i
|
||||||
} else if isForLoop(code) {
|
} else if isForLoop(code) {
|
||||||
return parseForLoop(code, index, codelines)
|
resp, worked, err, i = parseForLoop(code, index, codelines)
|
||||||
|
if !worked {
|
||||||
|
knownFailures = append(knownFailures, code.code)
|
||||||
|
knownFailuresErrs = append(knownFailuresErrs, err)
|
||||||
|
}
|
||||||
|
return resp, worked, err, i
|
||||||
} else if isGenericImport(code) {
|
} else if isGenericImport(code) {
|
||||||
return parseGenericImport(code, index, codelines)
|
resp, worked, err, i = parseGenericImport(code, index, codelines)
|
||||||
|
if !worked {
|
||||||
|
knownFailures = append(knownFailures, code.code)
|
||||||
|
knownFailuresErrs = append(knownFailuresErrs, err)
|
||||||
|
}
|
||||||
|
return resp, worked, err, i
|
||||||
} else if isTryCatch(code) {
|
} else if isTryCatch(code) {
|
||||||
return parseTryCatch(code, index, codelines)
|
resp, worked, err, i = parseTryCatch(code, index, codelines)
|
||||||
|
if !worked {
|
||||||
|
knownFailures = append(knownFailures, code.code)
|
||||||
|
knownFailuresErrs = append(knownFailuresErrs, err)
|
||||||
|
}
|
||||||
|
return resp, worked, err, i
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if isLine >= 1 {
|
if isLine >= 1 {
|
||||||
if isDoWrap(code) {
|
if isDoWrap(code) {
|
||||||
return parseDoWrap(code, index, codelines)
|
resp, worked, err, i = parseDoWrap(code, index, codelines)
|
||||||
|
if !worked {
|
||||||
|
knownFailures = append(knownFailures, code.code)
|
||||||
|
knownFailuresErrs = append(knownFailuresErrs, err)
|
||||||
|
}
|
||||||
|
return resp, worked, err, i
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,9 +162,19 @@ func translateVal(code UNPARSEcode, index int, codelines []UNPARSEcode, isLine i
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if isNumber(code) {
|
if isNumber(code) {
|
||||||
return parseNumber(code)
|
resp, worked, err, i = parseNumber(code)
|
||||||
|
if !worked {
|
||||||
|
knownFailures = append(knownFailures, code.code)
|
||||||
|
knownFailuresErrs = append(knownFailuresErrs, err)
|
||||||
|
}
|
||||||
|
return resp, worked, err, i
|
||||||
} else if isString(code) {
|
} else if isString(code) {
|
||||||
return parseString(code)
|
resp, worked, err, i = parseString(code)
|
||||||
|
if !worked {
|
||||||
|
knownFailures = append(knownFailures, code.code)
|
||||||
|
knownFailuresErrs = append(knownFailuresErrs, err)
|
||||||
|
}
|
||||||
|
return resp, worked, err, i
|
||||||
} else if issquareroot(code) {
|
} else if issquareroot(code) {
|
||||||
resp, worked, err, i = parseSquareroot(code, index, codelines)
|
resp, worked, err, i = parseSquareroot(code, index, codelines)
|
||||||
if worked {
|
if worked {
|
||||||
@@ -100,7 +188,12 @@ func translateVal(code UNPARSEcode, index int, codelines []UNPARSEcode, isLine i
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if isVariable(code) {
|
if isVariable(code) {
|
||||||
return parseVariable(code)
|
resp, worked, err, i = parseVariable(code)
|
||||||
|
if !worked {
|
||||||
|
knownFailures = append(knownFailures, code.code)
|
||||||
|
knownFailuresErrs = append(knownFailuresErrs, err)
|
||||||
|
}
|
||||||
|
return resp, worked, err, i
|
||||||
}
|
}
|
||||||
if isArray(code) {
|
if isArray(code) {
|
||||||
resp, worked, err, i = parseArray(code, index, codelines)
|
resp, worked, err, i = parseArray(code, index, codelines)
|
||||||
@@ -110,6 +203,12 @@ func translateVal(code UNPARSEcode, index int, codelines []UNPARSEcode, isLine i
|
|||||||
} else if isMap(code) {
|
} else if isMap(code) {
|
||||||
resp, worked, err, i = parseMap(code, index, codelines)
|
resp, worked, err, i = parseMap(code, index, codelines)
|
||||||
}
|
}
|
||||||
|
if isnot(code) {
|
||||||
|
resp, worked, err, i = parseNot(code, index, codelines, isLine)
|
||||||
|
if worked {
|
||||||
|
return resp, worked, err, i
|
||||||
|
}
|
||||||
|
}
|
||||||
{
|
{
|
||||||
operation, worked, err, step := parseOperations(code, index, codelines)
|
operation, worked, err, step := parseOperations(code, index, codelines)
|
||||||
if worked {
|
if worked {
|
||||||
@@ -118,12 +217,6 @@ func translateVal(code UNPARSEcode, index int, codelines []UNPARSEcode, isLine i
|
|||||||
return nil, worked, err, step
|
return nil, worked, err, step
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if isnot(code) {
|
|
||||||
resp, worked, err, i = parseNot(code, index, codelines, isLine)
|
|
||||||
if worked {
|
|
||||||
return resp, worked, err, i
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if isCall(code) {
|
if isCall(code) {
|
||||||
resp, worked, err, i = parseCall(code, index, codelines)
|
resp, worked, err, i = parseCall(code, index, codelines)
|
||||||
if worked {
|
if worked {
|
||||||
@@ -131,15 +224,29 @@ func translateVal(code UNPARSEcode, index int, codelines []UNPARSEcode, isLine i
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if isNegative(code) {
|
if isNegative(code) {
|
||||||
return parseNegative(code, index, codelines)
|
resp, worked, err, i = parseNegative(code, index, codelines)
|
||||||
|
if !worked {
|
||||||
|
knownFailures = append(knownFailures, code.code)
|
||||||
|
knownFailuresErrs = append(knownFailuresErrs, err)
|
||||||
|
}
|
||||||
|
return resp, worked, err, i
|
||||||
} else if isMapGet(code) {
|
} else if isMapGet(code) {
|
||||||
return mapGetParse(code, index, codelines)
|
resp, worked, err, i = mapGetParse(code, index, codelines)
|
||||||
|
if !worked {
|
||||||
|
knownFailures = append(knownFailures, code.code)
|
||||||
|
knownFailuresErrs = append(knownFailuresErrs, err)
|
||||||
|
}
|
||||||
|
return resp, worked, err, i
|
||||||
} else if isIndexGet(code) {
|
} else if isIndexGet(code) {
|
||||||
resp, worked, err, i = indexGetParse(code, index, codelines)
|
resp, worked, err, i = indexGetParse(code, index, codelines)
|
||||||
if worked {
|
if worked {
|
||||||
return resp, worked, err, i
|
return resp, worked, err, i
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if !worked {
|
||||||
|
knownFailures = append(knownFailures, code.code)
|
||||||
|
knownFailuresErrs = append(knownFailuresErrs, err)
|
||||||
|
}
|
||||||
return resp, worked, err, i
|
return resp, worked, err, i
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -30,5 +30,4 @@ let interpret(code) = do
|
|||||||
else loops.pop()
|
else loops.pop()
|
||||||
code_ptr = code_ptr + 1
|
code_ptr = code_ptr + 1
|
||||||
|
|
||||||
term.log("hello worldf")
|
|
||||||
interpret('>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.>>>++++++++[<++++>-]<.>>>++++++++++[<+++++++++>-]<---.<<<<.+++.------.--------.>>+.>++++++++++.')
|
interpret('>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.>>>++++++++[<++++>-]<.>>>++++++++++[<+++++++++>-]<---.<<<<.+++.------.--------.>>+.>++++++++++.')
|
||||||
Reference in New Issue
Block a user