mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-20 11:30:18 +00:00
fix a bug
This commit is contained in:
parent
040ef62d51
commit
b35e46265b
@ -683,6 +683,7 @@ __LISTCOMP:
|
|||||||
Token tkmodule = compileImportPath();
|
Token tkmodule = compileImportPath();
|
||||||
consume(TK("import"));
|
consume(TK("import"));
|
||||||
do {
|
do {
|
||||||
|
emitCode(OP_DUP_TOP);
|
||||||
consume(TK("@id"));
|
consume(TK("@id"));
|
||||||
Token tkname = parser->previous;
|
Token tkname = parser->previous;
|
||||||
int index = getCode()->addName(tkname.str(), NAME_GLOBAL);
|
int index = getCode()->addName(tkname.str(), NAME_GLOBAL);
|
||||||
@ -694,6 +695,7 @@ __LISTCOMP:
|
|||||||
index = getCode()->addName(tkname.str(), NAME_GLOBAL);
|
index = getCode()->addName(tkname.str(), NAME_GLOBAL);
|
||||||
emitCode(OP_STORE_NAME_PTR, index);
|
emitCode(OP_STORE_NAME_PTR, index);
|
||||||
} while (match(TK(",")));
|
} while (match(TK(",")));
|
||||||
|
emitCode(OP_POP_TOP);
|
||||||
consumeEndStatement();
|
consumeEndStatement();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,8 +3,8 @@
|
|||||||
|
|
||||||
#include "pocketpy.h"
|
#include "pocketpy.h"
|
||||||
|
|
||||||
#define PK_DEBUG_TIME
|
//#define PK_DEBUG_TIME
|
||||||
//#define PK_DEBUG_THREADED
|
#define PK_DEBUG_THREADED
|
||||||
|
|
||||||
struct Timer{
|
struct Timer{
|
||||||
const char* title;
|
const char* title;
|
||||||
|
@ -648,6 +648,49 @@ void __addModuleJson(VM* vm){
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void __addModuleMath(VM* vm){
|
||||||
|
PyVar mod = vm->newModule("math");
|
||||||
|
vm->setAttr(mod, "pi", vm->PyFloat(M_PI));
|
||||||
|
vm->setAttr(mod, "e", vm->PyFloat(M_E));
|
||||||
|
|
||||||
|
vm->bindFunc(mod, "log", [](VM* vm, const pkpy::ArgList& args) {
|
||||||
|
vm->__checkArgSize(args, 1);
|
||||||
|
return vm->PyFloat(log(vm->numToFloat(args[0])));
|
||||||
|
});
|
||||||
|
|
||||||
|
vm->bindFunc(mod, "log10", [](VM* vm, const pkpy::ArgList& args) {
|
||||||
|
vm->__checkArgSize(args, 1);
|
||||||
|
return vm->PyFloat(log10(vm->numToFloat(args[0])));
|
||||||
|
});
|
||||||
|
|
||||||
|
vm->bindFunc(mod, "log2", [](VM* vm, const pkpy::ArgList& args) {
|
||||||
|
vm->__checkArgSize(args, 1);
|
||||||
|
return vm->PyFloat(log2(vm->numToFloat(args[0])));
|
||||||
|
});
|
||||||
|
|
||||||
|
vm->bindFunc(mod, "sin", [](VM* vm, const pkpy::ArgList& args) {
|
||||||
|
vm->__checkArgSize(args, 1);
|
||||||
|
return vm->PyFloat(sin(vm->numToFloat(args[0])));
|
||||||
|
});
|
||||||
|
|
||||||
|
vm->bindFunc(mod, "cos", [](VM* vm, const pkpy::ArgList& args) {
|
||||||
|
vm->__checkArgSize(args, 1);
|
||||||
|
return vm->PyFloat(cos(vm->numToFloat(args[0])));
|
||||||
|
});
|
||||||
|
|
||||||
|
vm->bindFunc(mod, "tan", [](VM* vm, const pkpy::ArgList& args) {
|
||||||
|
vm->__checkArgSize(args, 1);
|
||||||
|
return vm->PyFloat(tan(vm->numToFloat(args[0])));
|
||||||
|
});
|
||||||
|
|
||||||
|
vm->bindFunc(mod, "isclose", [](VM* vm, const pkpy::ArgList& args) {
|
||||||
|
vm->__checkArgSize(args, 2);
|
||||||
|
_Float a = vm->numToFloat(args[0]);
|
||||||
|
_Float b = vm->numToFloat(args[1]);
|
||||||
|
return vm->PyBool(fabs(a - b) < 1e-6);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
class _PkExported{
|
class _PkExported{
|
||||||
public:
|
public:
|
||||||
virtual ~_PkExported() = default;
|
virtual ~_PkExported() = default;
|
||||||
@ -764,6 +807,7 @@ extern "C" {
|
|||||||
__addModuleSys(vm);
|
__addModuleSys(vm);
|
||||||
__addModuleTime(vm);
|
__addModuleTime(vm);
|
||||||
__addModuleJson(vm);
|
__addModuleJson(vm);
|
||||||
|
__addModuleMath(vm);
|
||||||
|
|
||||||
_Code code = compile(vm, __BUILTINS_CODE, "<builtins>");
|
_Code code = compile(vm, __BUILTINS_CODE, "<builtins>");
|
||||||
if(code == nullptr) exit(1);
|
if(code == nullptr) exit(1);
|
||||||
|
10
tests/math.py
Normal file
10
tests/math.py
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
from math import log, log10, log2, sin, cos, tan, e, pi, isclose
|
||||||
|
|
||||||
|
assert isclose(e, 2.718281828459045)
|
||||||
|
assert isclose(pi, 3.141592653589793)
|
||||||
|
assert isclose(log(10), 2.302585092994046)
|
||||||
|
assert isclose(log10(10), 1.0)
|
||||||
|
assert isclose(log2(10), 3.321928094887362)
|
||||||
|
assert isclose(sin(0), 0.0)
|
||||||
|
assert isclose(cos(0), 1.0)
|
||||||
|
assert isclose(tan(0), 0.0)
|
Loading…
x
Reference in New Issue
Block a user