⚡ add ghost type timestamp
This commit is contained in:
parent
2bb9655422
commit
8c3c8d3d62
|
@ -113,7 +113,10 @@ In 2022/2/17 update we added `\e` into the lexer. And the `bfcolored.nas` uses t
|
|||
|
||||
## More Nasal Generated Pictures
|
||||
|
||||
|Mandelbrot Set|Mandelbrot Set|Burning Ship|Burning Ship|Feigenbaum|
|
||||
|:----:|:----:|:----:|:----:|:----:|
|
||||
|[mandelbrotset.nas](../test/mandelbrotset.nas)|[mandelbrotset.nas](../test/mandelbrotset.nas)|[burningship.nas](../test/burningship.nas)|[burningship.nas](../test/burningship.nas)|[feigenbaum.nas](../test/feigenbaum.nas)|
|
||||
||||||
|
||||
|Mandelbrot Set|Mandelbrot Set|Julia Set|
|
||||
|:----:|:----:|:----:|
|
||||
|[mandelbrotset.nas](../test/mandelbrotset.nas)|[mandelbrotset.nas](../test/mandelbrotset.nas)|[juliaset.nas](../test/juliaset.nas)|
|
||||
||||
|
||||
|__Burning Ship__|__Burning Ship__|__Feigenbaum__|
|
||||
|[burningship.nas](../test/burningship.nas)|[burningship.nas](../test/burningship.nas)|[feigenbaum.nas](../test/feigenbaum.nas)|
|
||||
||||
|
4
makefile
4
makefile
|
@ -9,7 +9,7 @@ else
|
|||
CXXFLAGS = -std=$(STD) -c -O3 -fno-exceptions -fPIC
|
||||
endif
|
||||
|
||||
NASAL_HEADER=\
|
||||
NASAL_HEADER = \
|
||||
src/ast_dumper.h\
|
||||
src/ast_visitor.h\
|
||||
src/nasal_ast.h\
|
||||
|
@ -36,7 +36,7 @@ NASAL_HEADER=\
|
|||
src/coroutine.h\
|
||||
src/repl.h
|
||||
|
||||
NASAL_OBJECT=\
|
||||
NASAL_OBJECT = \
|
||||
build/nasal_err.o\
|
||||
build/nasal_ast.o\
|
||||
build/ast_visitor.o\
|
||||
|
|
|
@ -569,11 +569,71 @@ var builtin_md5(context* ctx, gc* ngc) {
|
|||
return ngc->newstr(md5(str.str()));
|
||||
}
|
||||
|
||||
var builtin_millisec(context* ctx, gc* ngc) {
|
||||
f64 res = std::chrono::duration_cast<std::chrono::milliseconds>
|
||||
(std::chrono::high_resolution_clock::now().time_since_epoch())
|
||||
.count();
|
||||
return var::num(res);
|
||||
class time_stamp {
|
||||
private:
|
||||
std::chrono::high_resolution_clock::time_point stamp;
|
||||
|
||||
public:
|
||||
time_stamp() {
|
||||
stamp = std::chrono::high_resolution_clock::now();
|
||||
}
|
||||
|
||||
void make_stamp() {
|
||||
stamp = std::chrono::high_resolution_clock::now();
|
||||
}
|
||||
|
||||
f64 elapsed_milliseconds() {
|
||||
auto duration = std::chrono::high_resolution_clock::now() - stamp;
|
||||
return std::chrono::duration_cast<std::chrono::milliseconds>(duration).count();
|
||||
}
|
||||
|
||||
f64 elapsed_microseconds() {
|
||||
auto duration = std::chrono::high_resolution_clock::now() - stamp;
|
||||
return std::chrono::duration_cast<std::chrono::microseconds>(duration).count();
|
||||
}
|
||||
};
|
||||
|
||||
void time_stamp_destructor(void* ptr) {
|
||||
delete static_cast<time_stamp*>(ptr);
|
||||
}
|
||||
|
||||
var builtin_maketimestamp(context* ctx, gc* ngc) {
|
||||
auto res = ngc->alloc(vm_type::vm_ghost);
|
||||
res.ghost().set(
|
||||
"nasal-time-stamp",
|
||||
time_stamp_destructor,
|
||||
nullptr,
|
||||
new time_stamp
|
||||
);
|
||||
return res;
|
||||
}
|
||||
|
||||
var builtin_time_stamp(context* ctx, gc* ngc) {
|
||||
auto object = ctx->localr[1];
|
||||
if (!object.object_check("nasal-time-stamp")) {
|
||||
return nil;
|
||||
}
|
||||
auto stamp = static_cast<time_stamp*>(object.ghost().pointer);
|
||||
stamp->make_stamp();
|
||||
return nil;
|
||||
}
|
||||
|
||||
var builtin_elapsed_millisecond(context* ctx, gc* ngc) {
|
||||
auto object = ctx->localr[1];
|
||||
if (!object.object_check("nasal-time-stamp")) {
|
||||
return var::num(-1);
|
||||
}
|
||||
auto stamp = static_cast<time_stamp*>(object.ghost().pointer);
|
||||
return var::num(stamp->elapsed_milliseconds());
|
||||
}
|
||||
|
||||
var builtin_elapsed_microsecond(context* ctx, gc* ngc) {
|
||||
auto object = ctx->localr[1];
|
||||
if (!object.object_check("nasal-time-stamp")) {
|
||||
return var::num(-1);
|
||||
}
|
||||
auto stamp = static_cast<time_stamp*>(object.ghost().pointer);
|
||||
return var::num(stamp->elapsed_microseconds());
|
||||
}
|
||||
|
||||
var builtin_gcextend(context* ctx, gc* ngc) {
|
||||
|
@ -684,7 +744,10 @@ nasal_builtin_table builtin[] = {
|
|||
{"__platform", builtin_platform},
|
||||
{"__arch", builtin_arch},
|
||||
{"__md5", builtin_md5},
|
||||
{"__millisec", builtin_millisec},
|
||||
{"__maketimestamp", builtin_maketimestamp},
|
||||
{"__time_stamp", builtin_time_stamp},
|
||||
{"__elapsed_millisecond", builtin_elapsed_millisecond},
|
||||
{"__elapsed_microsecond", builtin_elapsed_microsecond},
|
||||
{"__gcextd", builtin_gcextend},
|
||||
{"__gcinfo", builtin_gcinfo},
|
||||
{"__logtime", builtin_logtime},
|
||||
|
|
|
@ -69,7 +69,10 @@ var builtin_arch(context*, gc*);
|
|||
std::string tohex(u32);
|
||||
std::string md5(const std::string&);
|
||||
var builtin_md5(context*, gc*);
|
||||
var builtin_millisec(context*, gc*);
|
||||
var builtin_maketimestamp(context*, gc*);
|
||||
var builtin_time_stamp(context*, gc*);
|
||||
var builtin_elapsed_millisecond(context*, gc*);
|
||||
var builtin_elapsed_microsecond(context*, gc*);
|
||||
var builtin_gcextend(context*, gc*);
|
||||
var builtin_gcinfo(context*, gc*);
|
||||
var builtin_logtime(context*, gc*);
|
||||
|
|
|
@ -6,8 +6,8 @@ use std.coroutine;
|
|||
println("-------------------------------------------------------------");
|
||||
println(" FlightGear simulated-env for developers project, since 2019");
|
||||
println(" Developed by:");
|
||||
println(" Sidi Liang (FGPRC-0762)");
|
||||
println(" Haokun Lee (FGPRC-0818 aka ValKmjolnir)");
|
||||
println(" Sidi762 (FGPRC-0762)");
|
||||
println(" ValKmjolnir (FGPRC-0818)");
|
||||
println("-------------------------------------------------------------");
|
||||
println(" See help using command line argument: --fg-env-help");
|
||||
println("-------------------------------------------------------------");
|
||||
|
|
|
@ -7,7 +7,6 @@ var SEEK_CUR = io.SEEK_CUR;
|
|||
|
||||
var SEEK_END = io.SEEK_END;
|
||||
|
||||
|
||||
var new = func(filename, mode="r") {
|
||||
if (!io.exists(filename)) {
|
||||
return nil;
|
||||
|
|
17
std/lib.nas
17
std/lib.nas
|
@ -327,11 +327,20 @@ var assert = func(condition, message = "assertion failed!") {
|
|||
|
||||
# get time stamp, this will return a timestamp object
|
||||
var maketimestamp = func() {
|
||||
var t = 0;
|
||||
var stamp = __maketimestamp();
|
||||
var time_stamp = func(stamp) {
|
||||
return __time_stamp(stamp);
|
||||
}
|
||||
var elapsed_millisecond = func(stamp) {
|
||||
return __elapsed_millisecond(stamp);
|
||||
}
|
||||
var elapsed_microsecond = func(stamp) {
|
||||
return __elapsed_microsecond(stamp);
|
||||
}
|
||||
return {
|
||||
stamp: func() {t = __millisec();},
|
||||
elapsedMSec: func() {return __millisec()-t;},
|
||||
elapsedUSec: func() {return (__millisec()-t)*1000;}
|
||||
stamp: func() {return time_stamp(stamp);},
|
||||
elapsedMSec: func() {return elapsed_millisecond(stamp);},
|
||||
elapsedUSec: func() {return elapsed_microsecond(stamp);}
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ var check = func(dir_name) {
|
|||
println("\e[31merror\e[0m ", f);
|
||||
append(res, f);
|
||||
}
|
||||
println("compiling ", f, " in \e[32m", ts.elapsedMSec(), "\e[0m ms");
|
||||
println("compiling ", f, " in \e[32m", ts.elapsedUSec()/1000, "\e[0m ms");
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue