Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(123)

Side by Side Diff: forth/Forth.h

Issue 1559823002: remove forth experiment (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | forth/Forth.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1
2 /*
3 * Copyright 2011 Google Inc.
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
8
9 #ifndef Forth_DEFINED
10 #define Forth_DEFINED
11
12 #include "SkTypes.h"
13
14 class ForthOutput {
15 public:
16 virtual void show(const char output[]) = 0;
17 };
18
19 union FloatIntDual {
20 int32_t fInt;
21 float fFloat;
22 };
23
24 static inline int32_t f2i_bits(float x) {
25 FloatIntDual d;
26 d.fFloat = x;
27 return d.fInt;
28 }
29
30 static inline float i2f_bits(int32_t x) {
31 FloatIntDual d;
32 d.fInt = x;
33 return d.fFloat;
34 }
35
36 class ForthEngine {
37 public:
38 ForthEngine(ForthOutput*);
39 ~ForthEngine();
40
41 int depth() const { return fStackStop - fStackCurr; }
42 void clearStack() { fStackCurr = fStackStop; }
43
44 void push(intptr_t value);
45 intptr_t top() const { return this->peek(0); }
46 intptr_t peek(size_t index) const;
47 void setTop(intptr_t value);
48 intptr_t pop();
49
50 void fpush(float value) { this->push(f2i_bits(value)); }
51 float fpeek(size_t i) const { return i2f_bits(this->fpeek(i)); }
52 float ftop() const { return i2f_bits(this->top()); }
53 void fsetTop(float value) { this->setTop(f2i_bits(value)); }
54 float fpop() { return i2f_bits(this->pop()); }
55
56 void sendOutput(const char text[]);
57
58 private:
59 ForthOutput* fOutput;
60 intptr_t* fStackBase;
61 intptr_t* fStackCurr;
62 intptr_t* fStackStop;
63
64 void signal_error(const char msg[]) const {
65 SkDebugf("ForthEngine error: %s\n", msg);
66 }
67 };
68
69 struct ForthCallBlock {
70 const intptr_t* in_data;
71 size_t in_count;
72 intptr_t* out_data;
73 size_t out_count;
74 size_t out_depth;
75 };
76
77 class ForthWord {
78 public:
79 virtual ~ForthWord() {}
80 virtual void exec(ForthEngine*) = 0;
81
82 // todo: return error state of the engine
83 void call(ForthCallBlock*);
84 };
85
86 class ForthEnv {
87 public:
88 ForthEnv();
89 ~ForthEnv();
90
91
92 void addWord(const char name[], ForthWord*);
93
94 void parse(const char code[]);
95
96 ForthWord* findWord(const char name[]);
97
98 void run(ForthOutput* = NULL);
99
100 private:
101 class Impl;
102 Impl* fImpl;
103 };
104
105 #endif
OLDNEW
« no previous file with comments | « no previous file | forth/Forth.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698