Mercurial > code
annotate C++/modules/Js/Js.cpp @ 398:94bfe7ba9a13
Js:
- Rename some functions
- Cleanup a lot
- Add more documentation
- Add specialization of getProperty and getGlobal to void to push on the
stack
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 30 Sep 2015 19:59:12 +0200 |
parents | 69adcefe73ae |
children | ca5e4360f79a |
rev | line source |
---|---|
391 | 1 /* |
2 * Js.cpp -- JS API for irccd and Duktape helpers | |
3 * | |
4 * Copyright (c) 2013, 2014, 2015 David Demelier <markand@malikania.fr> | |
5 * | |
6 * Permission to use, copy, modify, and/or distribute this software for any | |
7 * purpose with or without fee is hereby granted, provided that the above | |
8 * copyright notice and this permission notice appear in all copies. | |
9 * | |
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
17 */ | |
18 | |
19 #include "Js.h" | |
20 | |
21 using namespace std::string_literals; | |
22 | |
23 namespace js { | |
24 | |
398 | 25 ErrorInfo Context::error(int index) |
391 | 26 { |
27 ErrorInfo error; | |
28 | |
398 | 29 index = duk_normalize_index(m_handle.get(), index); |
391 | 30 |
398 | 31 duk_get_prop_string(m_handle.get(), index, "name"); |
32 error.name = duk_to_string(m_handle.get(), -1); | |
33 duk_get_prop_string(m_handle.get(), index, "message"); | |
34 error.message = duk_to_string(m_handle.get(), -1); | |
35 duk_get_prop_string(m_handle.get(), index, "fileName"); | |
36 error.fileName = duk_to_string(m_handle.get(), -1); | |
37 duk_get_prop_string(m_handle.get(), index, "lineNumber"); | |
38 error.lineNumber = duk_to_int(m_handle.get(), -1); | |
39 duk_get_prop_string(m_handle.get(), index, "stack"); | |
40 error.stack = duk_to_string(m_handle.get(), -1); | |
41 duk_pop_n(m_handle.get(), 5); | |
391 | 42 |
43 return error; | |
44 } | |
45 | |
398 | 46 void Context::pcall(unsigned nargs) |
391 | 47 { |
392
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
48 if (duk_pcall(m_handle.get(), nargs) != 0) { |
398 | 49 ErrorInfo info = error(-1); |
50 duk_pop(m_handle.get()); | |
391 | 51 |
52 throw info; | |
53 } | |
54 } | |
55 | |
392
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
56 void Context::peval() |
391 | 57 { |
392
69adcefe73ae
Js: make it object-oriented
David Demelier <markand@malikania.fr>
parents:
391
diff
changeset
|
58 if (duk_peval(m_handle.get()) != 0) { |
398 | 59 ErrorInfo info = error(-1); |
60 duk_pop(m_handle.get()); | |
391 | 61 |
62 throw info; | |
63 } | |
64 } | |
65 | |
66 } // !js |