return path_clean(dir);
}
+#doc """
+ Returns the extension of the file on the end of the path, if present.
+
+ path_extension("foo.txt") -> "txt"
+ path_extension("foo/bar") -> ""
+ path_extension("foo/bar.txt") -> "txt"
+"""
path_extension :: (path: str) -> str {
for i: range.{ path.length - 1, 0, -1 } {
if path[i] == '/' do break;
return "";
}
+#doc """
+ Returns the last element of the path, sans its extension.
+
+ path_basename("foo.txt") -> "foo"
+ path_basename("test/bar.txt") -> "bar"
+"""
path_basename :: (path: str) -> str {
if path == "" do return ".";
return path[start + 1 .. end];
}
+#doc """
+ Splits the last path element off.
+"""
path_split :: (path: str) -> (parent: str, child: str) {
index := string.last_index_of(path, PATH_SEP);
return path[0 .. index], path[index+1 .. path.length];
maybe_copy_register_if_going_to_be_replaced(builder, local_idx);
// :PrimitiveOptimization
- // Perform a simple optimization that an immediate temporary moved to
- // a local can be optimized as an immediate loaded directly to a local.
- {
- ovm_instr_t *last_instr = &bh_arr_last(builder->program->code);
- if (OVM_INSTR_INSTR(*last_instr) == OVMI_IMM) {
- if (IS_TEMPORARY_VALUE(builder, last_instr->r) && last_instr->r == LAST_VALUE(builder)) {
- last_instr->r = local_idx;
- POP_VALUE(builder);
- return;
- }
- }
-
- if (OVM_INSTR_INSTR(*last_instr) == OVMI_REG_GET) {
- if (IS_TEMPORARY_VALUE(builder, last_instr->r) && last_instr->r == LAST_VALUE(builder)) {
- last_instr->r = local_idx;
- POP_VALUE(builder);
- return;
- }
- }
+ ovm_instr_t *last_instr = &bh_arr_last(builder->program->code);
+ if (IS_TEMPORARY_VALUE(builder, last_instr->r) && last_instr->r == LAST_VALUE(builder)) {
+ last_instr->r = local_idx;
+ POP_VALUE(builder);
+ return;
}
ovm_instr_t instr = {0};