mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-20 03:20:18 +00:00
change to 0-based
This commit is contained in:
parent
4e5021089c
commit
108d2fe969
@ -115,13 +115,13 @@ PK_EXPORT bool py_eval(const char* source, py_Ref module) PY_RAISE PY_RETURN;
|
|||||||
/// Example:
|
/// Example:
|
||||||
/// `py_newstr(py_r0(), "abc");`
|
/// `py_newstr(py_r0(), "abc");`
|
||||||
/// `py_newint(py_r1(), 123);`
|
/// `py_newint(py_r1(), 123);`
|
||||||
/// `py_smartexec("print(_1, _2)", NULL, py_r0(), py_r1());`
|
/// `py_smartexec("print(_0, _1)", NULL, py_r0(), py_r1());`
|
||||||
/// `// "abc 123" will be printed`.
|
/// `// "abc 123" will be printed`.
|
||||||
PK_EXPORT bool py_smartexec(const char* source, py_Ref module, ...) PY_RAISE PY_RETURN;
|
PK_EXPORT bool py_smartexec(const char* source, py_Ref module, ...) PY_RAISE PY_RETURN;
|
||||||
/// Evaluate a source string with smart interpretation.
|
/// Evaluate a source string with smart interpretation.
|
||||||
/// Example:
|
/// Example:
|
||||||
/// `py_newstr(py_r0(), "abc");`
|
/// `py_newstr(py_r0(), "abc");`
|
||||||
/// `py_smarteval("len(_1)", NULL, py_r0());`
|
/// `py_smarteval("len(_)", NULL, py_r0());`
|
||||||
/// `int res = py_toint(py_retval());`
|
/// `int res = py_toint(py_retval());`
|
||||||
/// `// res will be 3`.
|
/// `// res will be 3`.
|
||||||
PK_EXPORT bool py_smarteval(const char* source, py_Ref module, ...) PY_RAISE PY_RETURN;
|
PK_EXPORT bool py_smarteval(const char* source, py_Ref module, ...) PY_RAISE PY_RETURN;
|
||||||
|
@ -536,14 +536,14 @@ static bool
|
|||||||
// [globals, locals, code]
|
// [globals, locals, code]
|
||||||
CodeObject* co = py_touserdata(py_peek(-1));
|
CodeObject* co = py_touserdata(py_peek(-1));
|
||||||
py_StackRef locals = py_peek(-2);
|
py_StackRef locals = py_peek(-2);
|
||||||
int max_index = 0;
|
int max_index = -1;
|
||||||
c11__foreach(Bytecode, &co->codes, bc) {
|
c11__foreach(Bytecode, &co->codes, bc) {
|
||||||
if(bc->op == OP_LOAD_NAME) {
|
if(bc->op == OP_LOAD_NAME) {
|
||||||
c11_sv name = py_name2sv(bc->arg);
|
c11_sv name = py_name2sv(bc->arg);
|
||||||
if(name.data[0] != '_') continue;
|
if(name.data[0] != '_') continue;
|
||||||
int index;
|
int index;
|
||||||
if(name.size == 1) {
|
if(name.size == 1) {
|
||||||
index = 1;
|
index = 0;
|
||||||
} else if(name.size == 2 && isdigit(name.data[1])) {
|
} else if(name.size == 2 && isdigit(name.data[1])) {
|
||||||
index = name.data[1] - '0';
|
index = name.data[1] - '0';
|
||||||
} else {
|
} else {
|
||||||
@ -553,17 +553,17 @@ static bool
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(max_index == 0) { return ValueError("no placeholder found in the source"); }
|
if(max_index == -1) return ValueError("no placeholder found in the source");
|
||||||
|
|
||||||
for(int i = 1; i <= max_index; i++) {
|
for(int i = 0; i <= max_index; i++) {
|
||||||
py_Ref val = va_arg(args, py_Ref);
|
py_Ref val = va_arg(args, py_Ref);
|
||||||
char buf[3];
|
char buf[3];
|
||||||
buf[0] = '_';
|
buf[0] = '_';
|
||||||
buf[1] = '0' + i;
|
buf[1] = '0' + i;
|
||||||
buf[2] = '\0';
|
buf[2] = '\0';
|
||||||
py_dict_setitem_by_str(locals, buf, val);
|
py_dict_setitem_by_str(locals, buf, val);
|
||||||
if(i == 1) {
|
if(i == 0) {
|
||||||
// _ => _1
|
// _ => _0
|
||||||
py_dict_setitem_by_str(locals, "_", val);
|
py_dict_setitem_by_str(locals, "_", val);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user